/**
 * 
 */
package juegos;

/**
 * @author DaNieLooP
 *
 */
public class Habitacion {
	/**
	 * Puerta superior de la habitacion
	 */
	private boolean arriba;
	/**
	 * Puerta inferior de la habitacion
	 */
	private boolean abajo;
	/**
	 * Puerta izquierda de la habitacion
	 */
	private boolean izquierda;
	/**
	 * Puerta derecha de la habitacion
	 */
	private boolean derecha;
	/**
	 * Puerta delantera de la habitacion
	 */
	private boolean delante;
	/**
	 * Puerta trasera de la habitacion
	 */
	private boolean detras;
	
	
	/**
	 * Constructora de la habitacion, inicializa todas las puertas a false(cerradas)
	 */
	public Habitacion(){
		this.arriba=false;
		this.abajo=false;
		this.izquierda=false;
		this.derecha=false;
		this.delante=false;
		this.detras=false;
	}
	
	/**
	 * Metodo que abre una puerta dada
	 * @param a nombre de la puerta a abrir
	 */
	public void abre(String a){
		if(a.compareTo("arriba")==0){
			this.arriba=true;
		}else if(a.compareTo("abajo")==0){
			this.abajo=true;
		}else if(a.compareTo("izquierda")==0){
			this.izquierda=true;
		}else if(a.compareTo("derecha")==0){
			this.derecha=true;
		}else if(a.compareTo("delante")==0){
			this.delante=true;
		}else if(a.compareTo("detras")==0){
			this.detras=true;
		}
	}
	
	/**
	 * Metodo que dice si una puerta esta abierta o no
	 * @param a nombre de la puerta a comprobar
	 * @return true si la puerta esta abierta, false en caso contrario
	 */
	public boolean isAbierta(String a){
		boolean aux=false;
		if(a.compareTo("arriba")==0){
			aux=this.arriba;
		}else if(a.compareTo("abajo")==0){
			aux=this.abajo;
		}else if(a.compareTo("izquierda")==0){
			aux=this.izquierda;
		}else if(a.compareTo("derecha")==0){
			aux=this.derecha;
		}else if(a.compareTo("delante")==0){
			aux=this.delante;
		}else if(a.compareTo("detras")==0){
			aux=this.detras;
		}
		return aux;
	}
	
	/**
	 * Metodo que calcula es estado de una habitacion segun la situacion de sus puertas
	 * @return valor del estado
	 */
	public int getEstadoHabitacion(){
		int aux=0;
		if(arriba){
			aux=aux+1;
		}else{
			aux=aux+2;
		}
		if(abajo){
			aux=aux+3;
		}else{
			aux=aux+4;
		}
		if(izquierda){
			aux=aux+5;
		}else{
			aux=aux+6;
		}
		if(derecha){
			aux=aux+7;
		}else{
			aux=aux+8;
		}
		if(delante){
			aux=aux+9;
		}else{
			aux=aux+10;
		}
		if(detras){
			aux=aux+11;
		}else{
			aux=aux+12;
		}
		return aux;
	}
	
	/**
	 * metodo que calcula el valor heuristico de una habitacion segun la distancia a la salida
	 * @return el valor heuristico de la habitacion
	 */
	public int valorHeur(){
		int i=0;
		if(arriba){
			i++;
		}
		if(abajo){
			i++;
		}
		if(izquierda){
			i++;
		}
		if(derecha){
			i++;
		}
		if(delante){
			i++;
		}
		if(detras){
			i++;
		}
		return i;
	}
	
	/**
	 * Metodo que copia habitaciones
	 * @param a habitacion a copiar.
	 */
	protected void copia(Habitacion a){
		this.arriba=a.arriba;
		this.abajo=a.abajo;
		this.izquierda=a.izquierda;
		this.derecha=a.derecha;
		this.delante=a.delante;
		this.detras=a.detras;
	}
	
	
}
